jsp:useBean用法

jsp:useBean介绍

什么是JavaBean

JavaBean是特殊的Java类,使用Java语言书写,并且遵守JavaBean API规范。
接下来给出的是JavaBean与其它Java类相比而言独一无二的特征:

  • 提供一个默认的无参构造函数。
  • 需要被序列化并且实现了Serializable接口。
  • 可能有一系列可读写属性。
  • 可能有一系列的”getter”或”setter”方法

    JavaBean属性

    一个JavaBean对象的属性应该是可访问的。这个属性可以是任意合法的Java数据类型,包括自定义Java类。
    一个JavaBean对象的属性可以是可读写,或只读,或只写。JavaBean对象的属性通过JavaBean实现类中提供的两个方法来访问:
  • getPropertyName()
    举例来说,如果属性的名称为myName,那么这个方法的名字就要写成getMyName()来读取这个属性。这个方法也称为访问器
  • setPropertyName()
    举例来说,如果属性的名称为myName,那么这个方法的名字就要写成setMyName()来写入这个属性。这个方法也称为写入器。

    访问JavaBean

    jsp:useBean 标签可以在JSP中声明一个JavaBean,然后使用。声明后,JavaBean对象就成了脚本变量,可以通过脚本元素或其他自定义标签来访问。jsp:useBean 标签的语法格式如下:

    1
    2
    3
    <jsp:useBean id="bean 的名字" scope="bean 的作用域" class="bean类">
    <jsp:setProperty name="变量名" property="*"/>
    </jsp:useBean>
  • id属性用于指定JavaBean实例对象的引用名称

  • class属性用于指定JavaBean的完整类名(即需要带有包名)
  • scope属性用于指定JavaBean实例对象所存储的域范围,只能为page,request,session或application,默认为page。

标签 jsp:setProperty 用来设置已经实例化的Bean对象的属性:

1
2
3
4
<jsp:setProperty name = "JavaBean实例名" property = "*"/>
<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" />
<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" value = "BeanValue"/>
<jsp:setProperty name = "JavaBean实例名" property = "propertyName" param = "request对象中的参数名"

相应的含义:

  • 该形式是设置Bean 属性的快捷方式.在Bean 中属性的名字,类型必须和request对象中的参数名称相匹配。由于表单中传过来的数据类型都是String 类型的,Jsp内在机制会把这些参数转化成Bean属性对应的类型。property = “*”表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
  • 使用request对象中的一个参数值来指定Bean中的一个属性值。在这个语法中,property指定Bean 的属性名,而且Bean 属性和request参数的名字应相同。也就是说,如果在Bean 中有setUserName(String userName)方法,那么,propertyName的值就是”userName”.这种形式灵活性较强,可以有选择的对Bean中的属性赋值
  • value用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如“true”)通过Boolean.valueOf转换,int和Integer类型的属性值(比如“42”)通过Integer.valueOf转换。
  • param指定用哪个请求参数作为Bean属性的值。Bean 属性和request参数的名字可以不同。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

示例:制作一个简单计算器

不使用JavaBean

直接使用javascript:
Calculator.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My first Calculator</title>
</head>
<body>
This is My first Calculator.<br>
First number:<input type="text" id="num1" size="6"/><br>
Operator:
<select id="op">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select><br>
Second number:<input type="text" id="num2" size="6"/><br>
Result:<input type="text" id="result" size="6"/><br>
<button onclick="calculate()">Calculate</button>
</body>
<script type="text/javascript">
function calculate()
{
var num1 = parseInt(document.getElementById("num1").value);
var num2 = parseInt(document.getElementById("num2").value);
var op = document.getElementById("op").value;
var result = document.getElementById("result");
if(op=="+") result.value = num1+num2;
else if(op=="-") result.value = num1-num2;
else if(op=="*") result.value = num1*num2;
else result.value = num1/num2;
}
</script>
</html>

使用JavaBean

calculator2.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<jsp:useBean id="cal" scope="request" class="bean.Calculator">
<jsp:setProperty name="cal" property="*"/>
</jsp:useBean>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>My Second Calculator</title>
</head>
<body>
<%
String result = null;
/*Here must has try and catch*/
try{
cal.calculate();
result = cal.getResult();
}catch (Exception e) {
result = e.getMessage();
}
%>
<form method="get" action="calculator2.jsp">
This is My Second Calculator(use jsp:useBean).<br>
First number:<input type="text" name="num1" size="6"/><br>
Operator:
<select name="op">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select><br>
Second number:<input type="text" name="num2" size="6"/><br>
Result:<input type="text" name="result" value="<%= result %>"/><br>
<button type="submit">Calculate</button>
</form>
</body>
</html>

Calculator.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package bean;
public class Calculator {
private String num1;
private String num2;
private String op;
private String result;
private Double result_d;
public String getNum1() {
return num1;
}
public void setNum1(String num1) {
this.num1 = num1;
}
public String getNum2() {
return num2;
}
public void setNum2(String num2) {
this.num2 = num2;
}
public String getOp() {
return op;
}
public void setOp(String op) {
this.op = op;
}
public void calculate()
{
double num1_d = Double.parseDouble(num1);
double num2_d = Double.parseDouble(num2);
if(op.equals("+")) result_d = num1_d+num2_d;
else if(op.equals("-")) result_d= num1_d-num2_d;
else if(op.equals("*")) result_d = num1_d*num2_d;
else result_d = num1_d/num2_d;
result = result_d+"";
}
public String getResult() {
return result;
}
}